package com.cskaoyan.day6._02_api;

import java.util.HashMap;
import java.util.Map;
import java.util.Objects;

/**
 * @author Common-zhou
 * @since 2023-03-04 10:50
 */
public class Demo1 {
    public static void main(String[] args) {
        //Map<String, String> map = new HashMap<>();
        //
        //String key = "zs";
        //map.put(key, "hubei");
        //map.put("ls", "hubei");
        //
        //key = "wu";
        //
        //map.remove("zs");
        //System.out.println(map);

        Map<User, String> map = new HashMap<>();

        User zs = new User("zs", 18);
        User ls = new User("ls", 20);

        // 1
        map.put(zs, "zs的value");
        map.put(ls, "ls的value");

        // zs  ls
        System.out.println(map);

        // hashCode 变了。所以hash肯定不是同一个
        //
        zs.name = "zhangsan";

        map.remove(zs);
        // 1.对这个对象计算  hash
        // hashCode   ^ (hashCode >>> 16)
        // 2.通过这个hash （int） 取余
        // 得到在数组上的位置

        System.out.println(map);

        // 1.不要使用自定义的类作为key 。 String Integer
        // 2.把name改回去。  --》 不要去修改它的属性值


    }
}

class User {
    String name;
    int age;

    public User(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        User user = (User) o;
        return age == user.age && Objects.equals(name, user.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, age);
    }

    @Override
    public String toString() {
        return "User{" +
            "name='" + name + '\'' +
            ", age=" + age +
            '}';
    }
}
